package controllers;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import models.Paciente;
import models.Perfil;
import models.Usuario;
import notifiers.Notificador;
import play.Logger;
import securesocial.provider.SocialUser;
import securesocial.provider.UserId;
import securesocial.provider.UserService;

public class ADietaUserService implements UserService.Service {
	
	private Map<String, SocialUser> users = Collections.synchronizedMap(new HashMap<String, SocialUser>());
	
	@Override
	public SocialUser find(UserId id) {
		
		SocialUser socialUser = users.get(id.id + id.provider.toString());
		
		if (socialUser != null) {
			
			Usuario userAux = Usuario.find("bySocialUserId", socialUser.id.id).first();
			
			if (userAux == null) {
				
				Paciente paciente = new Paciente(socialUser.email, null, socialUser.displayName, socialUser.id);
				new Perfil(paciente);
				
				paciente.save();
				
				Notificador.emailBienvenida(paciente.getNombre(), paciente.getEmail());
                
				Logger.error("Se envio el email de Paciente Nuevo a --" + paciente.getNombre()+ "-- (" + paciente.getEmail() + ")");
                
			} else {
				
				userAux.addNutriToSession(Application.getSession());
				
				Logger.warn("Paciente --" + userAux.getNombre()+ "-- (" + userAux.getEmail() + ") Ya existente");
				
//				
//				if (userAux instanceof Paciente) {
//					
//					// @TODO Nico, fijate si esto te jode para el Establec Alimenticio!!! Preguntame cualquier cosa. Gus.
//					Paciente paciente = (Paciente)userAux;
//					
//					if (paciente.getPerfil() == null) {
//						Perfil perfil = Perfil.findById(userAux.getId());
//						
//						if(perfil.getPaciente() == null) {
//							
//							paciente.setPerfil(perfil);
//							perfil.setPaciente(paciente);
//							paciente.save();
//						}
//					}
//				}
			}
		}
		return socialUser;
	}

	@Override
	public void save(SocialUser user) {
		users.put(user.id.id + user.id.provider.toString(), user);

	}

	@Override
	public String createActivation(SocialUser user) {
		return null;
	}

	@Override
	public boolean activate(String uuid) {
		return false;
	}

	@Override
	public void deletePendingActivations() {

	}

}
